﻿using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Reflection;

namespace User.Global.Tests.Helper.Common
{
    public static class AttributeHelper
    {
        /// <summary>
        /// Prüft ob der Datentyp das passende Attribut hat.
        /// </summary>
        /// <returns>TRUE->Der Datentyp enthält das Attribut  | FALSE->Der Datentyp enthält das Attribut nicht.</returns>
        public static bool HasAttribute<T>(this PropertyInfo property)
        {
            var attribute = property
               .GetCustomAttributes(typeof(T), true)
               .Cast<T>()
               .FirstOrDefault();

            return (attribute != null);
        }

        /// <summary>
        /// Prüft ob das DataType Attribut auch den Datentyp hat der übergeben wurde.
        /// </summary>
        /// <returns>TRUE->Datentyp stimmt überein | FALSE->Datentyp stimmt nicht überein</returns>
        public static bool HasDataType(this PropertyInfo property, DataType dataType)
        {
            var attribute = property
               .GetCustomAttributes(typeof(DataTypeAttribute), true)
               .Cast<DataTypeAttribute>()
               .FirstOrDefault();
            
            return attribute != null && (dataType == attribute.DataType);
        }
    }
}
